package com.yunhe.abnormal.repository.base;

import com.yunhe.abnormal.domain.base.AlarmCalculation;
import com.yunhe.abnormal.domain.base.AlarmRuleInstance;

import java.util.List;

/**
 * 异常规则实例Session实现类
 * @author liuronglei
 */
public interface AlarmRuleInstanceSession {

    /**
     * 根据异常规则删除异常规则实例
     * @param alarmRuleId 异常规则ID
     */
    void deleteByRuleId(Long alarmRuleId);

    /**
     * 根据电站ID删除异常规则实例
     * @param stationId 电站ID
     */
    void deleteByStationId(Long stationId);

    /**
     * 根据设备ID删除异常规则实例
     * @param deviceId 设备ID
     */
    void deleteByDeviceId(Long deviceId);

    /**
     * 解绑异常规则实例所有关系
     * @param alarmRuleInstanceId 异常规则实例ID
     */
    void unBindRelat(Long alarmRuleInstanceId);

    /**
     * 绑定异常规则实例所有关系
     * @param alarmRuleInstance 异常规则实例对象
     */
    void bindRelat(AlarmRuleInstance alarmRuleInstance);

    /**
     * 根据异常规则ID获得异常规则实例
     * @param alarmRuleId 异常规则ID
     */
    List<AlarmRuleInstance> getByRuleId(Long alarmRuleId);

    /**
     * 根据电站ID获得异常规则实例
     * @param stationId 电站ID
     */
    List<AlarmRuleInstance> getByStationId(Long stationId);

    /**
     * 获得电站绑定的规则
     * @param stationId 电站ID
     */
    List<AlarmRuleInstance> getStationBind(Long stationId);

    /**
     * 获得电站绑定的规则
     * @param deviceId 设备ID
     */
    List<AlarmRuleInstance> getDeviceBind(Long deviceId);

    /**
     * 获得异常计算实例
     * @param stationId 电站ID
     * @param stationCode 电站代码
     */
    List<AlarmCalculation> getAlarmCalculation(Long stationId, Long stationCode);

    List<AlarmCalculation> getAlarmCalculationByInstanceIds(List<Long> instanceIds);
}
